home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Programming Languages Suite
/
ProgramD2.iso
/
Visual Database
/
Visual dBase v5.5
/
SAMPINC.PAK
/
DBASEEXT.H
next >
Wrap
C/C++ Source or Header
|
1995-07-18
|
6KB
|
183 lines
//
// $Revision: 2.9 $
//
// dBASE extensions.
//
#ifndef __DBASEEXT_H__
#define DBEXPORT _cdecl _loadds
#define FARVTABLE _huge
#define DBEXTERR int
class CSession;
#ifndef DBaseVar
class DBaseVar;
typedef long double DoubleType;
#endif
//
// Dlls export this function. This function is called every time an Instance
// of dBASE loads the DLL. If for some reason the DLL detirmines that it
// cannot load, it can return an error. If the DLL loads properly it should
// return DBASE_INIT_OK.
//
extern "C" int CALLBACK DBaseInitInstance(void);
#define DBASE_INIT_OK 0 // init
#define DBASE_INIT_NO_MULTI_INSTANCE 1 // dll can't support multi instance
#define DBASE_INIT_VBX_LOAD_FAIL 2 // VBX failed to load (message already put up by .VBX)
#define DBASE_INIT_ERROR -1 // error occured loading DLL
//
// DBaseExitInstance() is called when an instance of dBASE terminate or manually
// unloads a DLL through the RELEASE DLL command. This give the DLL a chance
// to free any resources associated with a running instance.
//
extern "C" void CALLBACK DBaseExitInstance(void);
//
// class DBaseExtension is an abstract base class (virtual function definitions
// only, not implementation) with callbacks into the dBASE executable. A
// pointer to this class is retrieved through a call the the function DBase().
//
// Using this virtual call mechanism, a DLL can call into dBASE without getting
// procedure addresses.
//
class FARVTABLE DBaseExtension {
public:
//
// Supplied for future expandability. Returns pointer to an abstract
// base class.
//
virtual void* DBEXPORT Supports(int interfaceId)=0;
//
// Get the version number of this interface. This class is designed to be
// extended over time. Each time the interface is extended, the version
// label is bumped.
//
virtual WORD DBEXPORT GetExtensionVersion()=0;
//
// Set the session pointer for the current session. This call is a
// convienance to the DLL programmer. The DLL programmer can create an
// instance of class CSession in the DBaseInitInstance() and set it.
// In subsequent call backs, this session pointer can be retrieved with
// a call to GetSession(). Data that is kept on a per-instance basis
// (DBaseVars for example) should be kept in the session object.
//
virtual void DBEXPORT SetSession(CSession *pSession)=0;
virtual CSession* DBEXPORT GetSession(void)=0;
//
// Get a string representation of the Last Error that Occured
//
virtual char * DBEXPORT GetError()=0;
//
// Set an error to display
//
virtual void DBEXPORT SetError(char *)=0;
//
// Stop the thread of execution that has called this function.
//
virtual void DBEXPORT ReturnError()=0;
//
// Variable Manipulation functions
//
virtual DBaseVar* DBEXPORT MakeVar()=0;
virtual void DBEXPORT DestroyVar(DBaseVar*)=0;
//
// Returns a pointer to the variable THIS. If null is returned, the
// current execution context is a function, not a method. Though there
// are not protections, one should never write to the variable THIS.
//
virtual DBaseVar* DBEXPORT GetThis()=0;
//
// Returns the type of a dbase variable.
// return values
// 'L' = Logical
// 'N' = Numeric (floating point DoubleType)
// 'I' = Integer Numeric
// 'C' = String
// 'D' = Date
// 'O' = Object
// 'P' = Codeblock or function
// 'M' = Memo
// 'B' = BookMark
//
virtual char DBEXPORT VarGetType(DBaseVar*)=0;
//
// Retrieves binary value from variable.
//
virtual DBEXTERR DBEXPORT VarGetLogical(DBaseVar*, BOOL *pDest)=0;
virtual DBEXTERR DBEXPORT VarGetDouble(DBaseVar*, DoubleType *pDest)=0;
virtual DBEXTERR DBEXPORT VarGetLong(DBaseVar*, long *pDest)=0;
virtual DBEXTERR DBEXPORT VarGetString(DBaseVar*, char**ppDest)=0;
virtual DBEXTERR DBEXPORT VarGetStringLen(DBaseVar*, int*)=0;
virtual DBEXTERR DBEXPORT VarGetProperty( DBaseVar* pObj, char* pPropertyName,
DBaseVar* pDest )=0;
virtual DBEXTERR DBEXPORT VarGetElement(DBaseVar* pArray,DBaseVar*pDest,
int iDimCount, DBaseVar**)=0;
virtual DBEXTERR DBEXPORT VarRunCode(DBaseVar *pSrc,DBaseVar *pDest,
int iParaCount,DBaseVar**)=0;
virtual void DBEXPORT VarSetLogical(DBaseVar*, BOOL)=0;
virtual void DBEXPORT VarSetDouble(DBaseVar*, DoubleType)=0;
virtual void DBEXPORT VarSetLong(DBaseVar*, long)=0;
virtual void DBEXPORT VarSetZString(DBaseVar*, char* pDest)=0;
virtual void DBEXPORT VarSetStringLen(DBaseVar*, int)=0;
virtual char* DBEXPORT VarGetStringBuffer(DBaseVar*)=0;
virtual DBEXTERR DBEXPORT VarSetProperty(DBaseVar* pObject, char *pPropName,
DBaseVar* pNewVal )=0;
virtual DBEXTERR DBEXPORT VarSetElement(DBaseVar* pArray, int iDimCount,
DBaseVar** ppParams, DBaseVar* pNewVal)=0;
virtual DBEXTERR DBEXPORT VarSetCodeBlock(DBaseVar *pSrc, char*)=0;
//
// Sets the contents of Variable pSrc from Variable pDest
//
virtual void DBEXPORT VarSetVar(DBaseVar *pDest, DBaseVar *pSrc)=0;
};
//
// The function 'DBase()' returns the address of the running instance's
// DBaseExtension pointer. This pointer in the 16 bit version is stored at
// offset 0x40 in the stack segment (executable data segment).
//
// 32 bit versions of dBASE will use a different mechanism, code will be
// recompilable.
//
#define EXT_PTR 0x30
static DBaseExtension* DBase(){
DBaseExtension *pRet;
_asm {
mov ax,ss:[EXT_PTR]
mov dx,ss:[EXT_PTR+2]
mov word ptr pRet,ax
mov word ptr pRet+2,dx
}
return pRet;
}
#define __DBASEEXT_H__
#endif